Strassen Matrix Multiplication Algorithm

In linear algebra, the Strassen algorithm, named after Volker Strassen, is an algorithm for matrix multiplication. It is faster than the standard matrix multiplication algorithm and is useful in practice for large matrix, but would be slower than the fastest known algorithms for extremely large matrix. The Strassen algorithm is only slightly better than that, but its publication resulted in much more research about matrix multiplication that led to faster approaches, such as the Coppersmith-Winograd algorithm. Volker Strassen first published this algorithm in 1969 and proved that the n3 general matrix multiplication algorithm was n't optimal.
#include <iostream>
using namespace std;

Multiply(int A[][], int B[][], int n)
{
	if (n == 2)
	{
		int p1 = (a[0][0] + a[1][1]) * (b[0][0] + b[1][1]);
		int p2 = (a[1][0] + a[1][1]) * b[0][0];
		int p3 = a[0][0] * (b[0][1] - b[1][1]);
		int p4 = a[1][1] * (b[1][0] - b[0][0]);
		int p5 = (a[0][0] + a[0][1]) * b[1][1];
		int p6 = (a[1][0] - a[0][0]) * (b[0][0] + b[0][1]);
		int p7 = (a[0][1] - a[1][1]) * (b[1][0] + b[1][1]);

		int c[n][n];
		c[0][0] = p1 + p4 - p5 + p7;
		c[0][1] = p3 + p5;
		c[1][0] = p2 + p4;
		c[1][1] = p1 - p2 + p3 + p6;

		return c[][];
	}
	else
	{
	}
}

int main()
{
	int p, q, r, s;
	cout << "Enter the dimensions of Matrices";
	cin >> n;
	int A[n][n], ;
	int B[n][n], ;
	cout << "Enter the elements of Matrix A";
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> A[i][j];
		}
	}

	cout << "Enter the elements of Matrix B";
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> B[i][j];
		}
	}

	Multiply(A, B, n);
	return 0;
}

LANGUAGE:

DARK MODE: